package com.nineclock.system.service.impl;

import com.alibaba.excel.util.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

import com.nineclock.common.constant.NcConstant;

import com.nineclock.common.entity.Result;
import com.nineclock.common.entity.UserInfo;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.threadLocal.CurrentUserHolder;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.system.dto.SysChangeMainManagerDTO;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.dto.SysCompanyUserDTO;
import com.nineclock.system.dto.SysRoleDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.mapper.SysCompanyUserRoleMapper;
import com.nineclock.system.mapper.SysRoleMapper;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.pojo.SysCompanyUserRole;
import com.nineclock.system.pojo.SysRole;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import javax.security.auth.callback.LanguageCallback;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Service
@Slf4j
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    private SysCompanyContactConfigMapper companyContactConfigMapper;
        @Autowired
        private SysRoleMapper roleMapper;
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {
        //判断传过来的数据是否为空
        if (sysCompanyContactConfigDTO==null ||sysCompanyContactConfigDTO.getName()==null){
           // throw new RuntimeException("添加的企业字段为空");
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }


        //TODO 假设企业id为1
        //Long companyId=1L;
        UserInfo userInfo = CurrentUserHolder.get();
        Long companyId = userInfo.getCompanyId();
        //先复制穿过来的数据
        SysCompanyContactConfig contactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);

        //设置字段类型
        contactConfig.setFieldType("String");
        contactConfig.setStatus((short) 1);
        contactConfig.setCompanyId(companyId);

        //向数据库添加字段
        companyContactConfigMapper.insert(contactConfig);

    }

    /*
    * 查询并初始化通讯录数据
    * 思路:
    *  先根据当前登入的用户的企业id查询通讯录字段
    *  如果查询为null.需要为该企业初始化通讯录字段
    *  如果查询部位null,则返回该企业对应的企业通讯录字段
    *
    * */

    @Override
    public List<SysCompanyContactConfigDTO> queryCompanyContactConfig() {
        List<SysCompanyContactConfigDTO> dtoList = new ArrayList<>();
        //获取当前企业的id
        //Long companyId=1L;
        UserInfo userInfo = CurrentUserHolder.get();
        Long companyId = userInfo.getCompanyId();
        //构造查询条件
        LambdaQueryWrapper<SysCompanyContactConfig> configWrapper = new LambdaQueryWrapper<>();
            configWrapper.eq(SysCompanyContactConfig::getCompanyId,companyId);
        List<SysCompanyContactConfig> sysCompanyContactConfigs = companyContactConfigMapper.selectList(configWrapper);

        //判断该企业是否需要初始化通讯录字段,需要初始化,不需要直接返回数据
        if (CollectionUtils.isEmpty(sysCompanyContactConfigs)){
            for (String fieldName : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig sysCompanyContactConfig = new SysCompanyContactConfig();
                sysCompanyContactConfig.setName(fieldName);
                sysCompanyContactConfig.setCompanyId(companyId);
                sysCompanyContactConfig.setStatus((short) 1);
                sysCompanyContactConfig.setType("fixed");
                sysCompanyContactConfig.setFieldType("String");
        dtoList.add(BeanHelper.copyProperties(sysCompanyContactConfig,SysCompanyContactConfigDTO.class));
        companyContactConfigMapper.insert(sysCompanyContactConfig);
            }
        return dtoList;
        }

        return BeanHelper.copyWithCollection(sysCompanyContactConfigs,SysCompanyContactConfigDTO.class);
    }

    /*
    修该通讯录字段信息
     思路:
      1.先根据id查询该企业通讯录
      2.如果不存在,则抛出运行时异常
      3.如果能够查询到,根据id更新企业通讯录信息
    */
    @Override
    public void updateCompanyContactConfig(Long id, short status) {
        SysCompanyContactConfig contactConfig= companyContactConfigMapper.selectById(id);
        if (contactConfig==null){
            throw new RuntimeException(ResponseEnum.DATA_NOT_EXISTS.getMessage());
        }

        contactConfig.setCompanyId(1L);
        contactConfig.setStatus(status);
        companyContactConfigMapper.updateById(contactConfig);
    }

    //删除
    @Override
    public void deleteCompanyContactConfig(Long id) {
        companyContactConfigMapper.deleteById(id);
    }


}
